import Vue from 'vue'
import Router from 'vue-router'

// Vue.use(Router) 1.告诉Vue要使用 Vue Router 插件 2.调用Vue Router插件中的install方法 3.确保Vue Router的功能（路由匹配，组件渲染，导航守卫等）正常使用 调用前需导入ROuter
Vue.use(Router)

/* Layout */
// 从根目录下导入对应的路由 将所有组件的路由导入到index.js下方便Vue Router识别和管理
import Layout from '@/layout'
import departmentRouter from './modules/department'
import approvalRouter from './modules/approval'
import attendanceRouter from './modules/attendance'
import employeeRouter from './modules/employee'
import permissionRouter from './modules/permission'
import roleRouter from './modules/role'
import salaryRouter from './modules/salary'
import socialRouter from './modules/social'

/**
  注意：子菜单仅在路由的children数组长度大于等于1时出现
  详情见：https://panjiachen.github.io/vue-element-admin-site/guide/essentials/router-and-nav.html
  hidden: true 如果设置为true，则该项不会在侧边栏显示（默认为false）
  alwaysShow: true 如果设置为true，则始终显示根菜单
  如果不设置alwaysShow，当项有多个子路由时，它会以嵌套模式显示，否则不显示根菜单
  redirect: noRedirect 如果设置为noRedirect，则在面包屑导航中不会进行重定向
  name:'router-name' 名称用于<keep-alive>（必须设置！！！）
  meta : {
  roles: ['admin','editor'] 控制访问页面的角色（可以设置多个角色）
  title: 'title' 在侧边栏和面包屑导航中显示的名称（建议设置）
  icon: 'svg-name'/'el-icon-x' 在侧边栏显示的图标
  breadcrumb: false 如果设置为false，则该项在面包屑导航中隐藏（默认为true）
  activeMenu: '/example/list' 如果设置了路径，则侧边栏会高亮显示你设置的路径
*/

/**
  constantRoutes
  一个基础页面，没有权限要求
  所有角色都可以访问
*/

export const constantRoutes = [
  {
    path: '/login',
    component: () => import('@/views/login/index'),
    hidden: true
  },

  {
    path: '/404',
    component: () => import('@/views/404'),
    hidden: true
  },

  {
    path: '/',
    component: Layout,
    redirect: '/dashboard',
    children: [{
      path: 'dashboard',
      name: 'Dashboard',
      component: () => import('@/views/dashboard/index'),
      meta: { title: '首页', icon: 'dashboard' }
    }]
  }

  // 404 page must be placed at the end !!!
]
// 导出动态路由
export const asyncRoutes = [
  departmentRouter,
  roleRouter,
  employeeRouter,
  permissionRouter,
  approvalRouter,
  attendanceRouter,
  salaryRouter,
  socialRouter
]

const createRouter = () => new Router({
  mode: 'history', // require service support
  scrollBehavior: () => ({ y: 0 }),
  routes: constantRoutes
})

const router = createRouter()

// Detail see: https://github.com/vuejs/vue-router/issues/1234#issuecomment-357941465
export function resetRouter() {
  const newRouter = createRouter()
  router.matcher = newRouter.matcher // reset router
}

export default router
